package com.qfedu.mtl.util.handler.impl;


import com.qfedu.mtl.util.DBUtil;
import com.qfedu.mtl.util.handler.ResultSetHandler;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//把单行查询 转成一个HashMap
public class MapHandler implements ResultSetHandler<Map<String,Object>> {
    private Boolean openCamel;

    public MapHandler(Boolean openCamel) {
        this.openCamel = openCamel;
    }

    public MapHandler() {

    }

    @Override
    public Map<String, Object> mapperTo(ResultSet rs) {
        //定义被返回的对象
        Map<String,Object> map =  null;
        //定义要给列名集合
        List<String> columns = new ArrayList<>();

        try {
            // 我需要知道结果集合中有哪些信息(发现列名)
            ResultSetMetaData metaData = rs.getMetaData();
            //获得列数
            int columnCount = metaData.getColumnCount();
            //遍历获得每个列的名字
            for (int i = 1; i <= columnCount; i++) {
                String columnLabel = metaData.getColumnLabel(i);
                //保存这些列名
                columns.add(columnLabel);
            }
            // 如果有数据
            if( rs.next() ){
                // 创建对象为属性赋值
                map = new HashMap<>();
                // 根据列名获取数据
                for (String column : columns) {
                    if( openCamel ){
                        //把把列名转成驼峰找属性
                        column = DBUtil.underLine2Camel(column);
                    }
                    Object value = rs.getObject(column);
                    map.put(column,value);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return map;
    }
}
